import { BasicColumn } from '/@/components/Table';
import { FormSchema } from '/@/components/Table';
import { rules } from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
import { getWeekMonthQuarterYear } from '/@/utils';
//列表数据
export const columns: BasicColumn[] = [
  {
    title: '名称',
    align: 'center',
    dataIndex: 'title',
  },
  {
    title: '协议',
    align: 'center',
    dataIndex: 'agreementName',
  },
  /*   {
    title: '协议描述',
    align: 'center',
    dataIndex: 'agreementDesc',
  }, */
  {
    title: '信源地址',
    align: 'center',
    dataIndex: 'agreementIp',
  },
  {
    title: '端口',
    align: 'center',
    dataIndex: 'agreementPort',
  },
  {
    title: '接口地址',
    align: 'center',
    dataIndex: 'interfaceAddr',
  },
];
//查询数据
export const searchFormSchema: FormSchema[] = [];
//表单数据
export const formSchema: FormSchema[] = [
  {
    label: '名称',
    field: 'title',
    component: 'Input',
    rules: [
      {
        required: true,
        message: '请输入名称',
      },
    ],
  },
  {
    label: '协议',
    field: 'agreementName',
    component: 'JDictSelectTag',
    componentProps: {
      dictCode: 'agreement_name', //改成下拉框
      type: 'list',
      valueField: 'value', // 存储字典值（默认）
      labelField: 'text', // 显示字典文本（默认）
      // 添加空值处理
      getPopupContainer: () => document.body,
      notFoundContent: '暂无数据',
    },
    rules: [
      {
        required: true,
        message: '请选择协议',
      },
    ],
  },
  /* {
    label: 'ip',
    field: 'ip',
    component: 'Input',
    rules: [
      {
        required: true,
        message: '请输入ip',
      },
    ],
    show: ({ values }) => {
      // 当 agreementName 既不等于 'ping' 也不等于 'snmp' 时显示
      return values?.agreementName == 'ping';
    },
  }, */
  {
    label: '协议描述',
    field: 'agreementDesc',
    component: 'Input',
  },
  {
    label: '信源地址',
    field: 'agreementIp',
    component: 'Input',
    dynamicRules: ({ model }) => {
      // 如果是ping协议，返回空规则（不验证）
      if (model?.agreementName === 'ping') {
        return [];
      }
      // 非ping协议，必填验证
      return [
        {
          required: true,
          validator: (_rule, value) => {
            if (!value || value.trim() === '') {
              return Promise.reject('信源地址必填');
            }
            return Promise.resolve();
          },
          trigger: ['blur', 'change'],
        },
      ];
    },
    show: ({ values }) => {
      // 当 agreementName 不等于 'snmp' 时显示
      return  values?.agreementName !== 'snmp';
    },
  },
  {
    label: '端口',
    field: 'agreementPort',
    component: 'InputNumber',
    dynamicRules: ({ model }) => {
      // 如果是ping协议 探针，返回空规则（不验证）
      if (model?.agreementName === 'ping') {
        return [];
      }
      // 非ping 探针，必填验证
      return [
        {
          required: true,
          validator: (_rule, value) => {
            if (!value || value.trim() === '') {
              return Promise.reject('端口必填');
            }
            return Promise.resolve();
          },
          trigger: ['blur', 'change'],
        },
      ];
    },
    show: ({ values }) => {
      // 当 agreementName 既不等于 'ping' 也不等于 'snmp' 时显示
      return values?.agreementName !== 'ping' && values?.agreementName !== 'snmp' && values?.agreementName !== 'udp';
    },
  },
  {
    label: '接口地址',
    field: 'interfaceAddr',
    component: 'Input',
    dynamicRules: ({ model }) => {
      // 新增对 undefined 的处理，避免意外进入默认分支
      const agreement = model?.agreementName;
      console.log('当前协议:', agreement);
      // 当协议为 udp/ping/probe 或未定义时，都返回空规则
      if (!agreement || ['ping', 'udp'].includes(agreement)) {
        console.log('协议为 udp/ping 或未定义，返回空规则');
        return [];
      }
      // 其他协议才执行必填验证
      console.log('协议为其他类型，返回必填规则');
      return [
        {
          required: true,
          validator: (_rule, value) => {
            if (!value || value.trim() === '') {
              return Promise.reject('接口地址必填');
            }
            return Promise.resolve();
          },
          trigger: ['blur', 'change'],
        },
      ];
    },
    show: ({ values }) => {
      // 当 agreementName 既不等于 'ping' 也不等于 'snmp' 时显示
      return values?.agreementName !== 'ping' && values?.agreementName !== 'snmp' && values?.agreementName !== 'udp';
    },
  },
  // TODO 主键隐藏字段，目前写死为ID
  {
    label: '',
    field: 'id',
    component: 'Input',
    show: false,
  },
];

// 高级查询数据
export const superQuerySchema = {
  agreementName: { title: '协议名称', order: 0, view: 'text', type: 'string' },
  agreementDesc: { title: '协议描述', order: 1, view: 'text', type: 'string' },
  agreementIp: { title: '信源地址', order: 2, view: 'text', type: 'string' },
  agreementPort: { title: '端口', order: 3, view: 'text', type: 'string' },
  interfaceAddr: { title: '接口地址', order: 4, view: 'text', type: 'string' },
};

/**
 * 流程表单调用这个方法获取formSchema
 * @param param
 */
export function getBpmFormSchema(_formData): FormSchema[] {
  // 默认和原始表单保持一致 如果流程中配置了权限数据，这里需要单独处理formSchema
  return formSchema;
}
